﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SqlDataAccess;

namespace QuanLyBanHang.HeThong
{
	public partial class F110_Danh_sach_chuc_nang : Form
	{
		public F110_Danh_sach_chuc_nang()
		{
			InitializeComponent();
			set_define_events();
		}

		#region Members
		BKIQuanLyBanHangEntities db = new BKIQuanLyBanHangEntities();
		#endregion

		#region Private Methods
		private void set_define_events()
		{
			this.m_grv.CellClick += m_grv_CellClick;
			this.m_cmd_cap_nhat.Click += m_cmd_cap_nhat_Click;
			this.m_cmd_them.Click += m_cmd_them_Click;
			this.m_txt_tu_khoa.TextChanged += m_txt_tu_khoa_TextChanged;
			this.m_cmd_xoa.Click += m_cmd_xoa_Click;
			this.m_cmd_tim_kiem_chuc_nang.Click += m_cmd_tim_kiem_Click;
			this.m_cmd_xoa_chuc_nang.Click += m_cmd_xoa_Click;
			this.m_cmd_xoa_trang.Click += m_cmd_xoa_trang_Click;
			this.Load += F110_Danh_sach_chuc_nang_Load;
		}

		
		private bool check_validate_data_is_ok()
		{
			if (string.IsNullOrWhiteSpace(m_txt_ma_form.Text))
			{
				MessageBox.Show("Bạn phải nhập Mã form!", "Thông báo");
				m_txt_ma_form.Focus();
				return false;
			}
			if (string.IsNullOrWhiteSpace(m_txt_ten_hien_thi.Text))
			{
				MessageBox.Show("Bạn phải nhập Tên hiển thị!", "Thông báo");
				m_txt_ten_hien_thi.Focus();
				return false;
			}
			return true;
		}

		private void load_data_to_grid()
		{
			var lst_cn = db.HT_CHUC_NANG
				.Where(x => x.TEN_CHUC_NANG.Contains(m_txt_tu_khoa.Text)
						|| x.MA_CHUC_NANG.Contains(m_txt_tu_khoa.Text))
					.Select(x => new
					{
						ID = x.ID
						,
						MA_CHUC_NANG = x.MA_CHUC_NANG
						,
						TEN_CHUC_NANG = x.TEN_CHUC_NANG
					})
				.ToList();

			m_grv.DataSource = lst_cn;
			m_grv.Columns[0].HeaderText = "ID";
			m_grv.Columns[0].Width = 20;
			m_grv.Columns[0].Visible = false;
			m_grv.Columns[1].HeaderText = "Mã chức năng";
			m_grv.Columns[1].Width = 200;
			m_grv.Columns[2].HeaderText = "Tên chức năng";
			m_grv.Columns[2].Width = 300;
		}

		#endregion

		#region Events
		void F110_Danh_sach_chuc_nang_Load(object sender, EventArgs e)
		{
			try
			{
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_xoa_trang_Click(object sender, EventArgs e)
		{
			try
			{
				m_txt_ma_form.Text = "";
				m_txt_ten_hien_thi.Text = "";
				m_txt_ma_form.Focus();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_xoa_Click(object sender, EventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null)
				{
					MessageBox.Show("Bạn hãy chọn Chức năng để xoá!", "Thông báo!");
					return;
				}
				decimal id_cn = (decimal)m_grv.CurrentRow.Cells[0].Value;//id
				HT_CHUC_NANG v_cn = db.HT_CHUC_NANG.FirstOrDefault(x => x.ID == id_cn);
				if (v_cn != null)
				{
					if (MessageBox.Show(@"Bạn có chắc chắn muốn xoá CHỨC NĂNG này và THÔNG TIN PHÂN QUYỀN liên quan đến chức năng này không?", "Cảnh báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
					{
						//Xoa du lieu bang HT_PHAN_QUYEN_NHOM
						var lst_phan_quyen = db.HT_PHAN_QUYEN_NHOM
												.Where(x => x.ID_CHUC_NANG == id_cn)
												.ToList();
						for (int i = 0; i < lst_phan_quyen.Count; i++)
						{
							db.HT_PHAN_QUYEN_NHOM.Remove(lst_phan_quyen[i]);
							db.SaveChanges();
						}
						//Xoa du lieu bang HT_CHUC_NANG
						db.HT_CHUC_NANG.Remove(v_cn);
						db.SaveChanges();
						MessageBox.Show("Bạn đã xoá thành công chức năng này!", "Thông báo");
						load_data_to_grid();
					}
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_tim_kiem_Click(object sender, EventArgs e)
		{
			try
			{
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_them_Click(object sender, EventArgs e)
		{
			try
			{
				if (check_validate_data_is_ok())
				{
					HT_CHUC_NANG v_cn = new HT_CHUC_NANG();
					v_cn.TEN_CHUC_NANG = m_txt_ten_hien_thi.Text.Trim();
					v_cn.MA_CHUC_NANG = m_txt_ma_form.Text.Trim();
					db.HT_CHUC_NANG.Add(v_cn);
					db.SaveChanges();
					m_cmd_xoa_trang_Click(null, null);
					MessageBox.Show("Bạn đã thêm mới chức năng thành công!", "Thông báo");
					load_data_to_grid();
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_cmd_cap_nhat_Click(object sender, EventArgs e)
		{
			try
			{
				if (m_grv.CurrentRow == null) return;
				decimal id_cn = (decimal)m_grv.CurrentRow.Cells[0].Value;//id
				HT_CHUC_NANG v_cn = db.HT_CHUC_NANG.FirstOrDefault(x => x.ID == id_cn);
				if (v_cn != null)
				{
					if (check_validate_data_is_ok())
					{
						v_cn.MA_CHUC_NANG = m_txt_ma_form.Text.Trim();
						v_cn.TEN_CHUC_NANG = m_txt_ten_hien_thi.Text.Trim();
						db.SaveChanges();
						m_cmd_xoa_trang_Click(null, null);
						MessageBox.Show("Bạn đã cập nhật thông tin thành công!", "Thông báo");
					}
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_txt_tu_khoa_TextChanged(object sender, EventArgs e)
		{
			try
			{
				load_data_to_grid();
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

		void m_grv_CellClick(object sender, DataGridViewCellEventArgs e)
		{
			try
			{
				decimal id_cn = (decimal)m_grv.CurrentRow.Cells[0].Value;//id
				HT_CHUC_NANG v_cn = db.HT_CHUC_NANG.FirstOrDefault(x => x.ID == id_cn);
				if (v_cn != null)
				{
					m_txt_ma_form.Text = v_cn.MA_CHUC_NANG;
					m_txt_ten_hien_thi.Text = v_cn.TEN_CHUC_NANG;
				}
			}
			catch (Exception v_e)
			{
				MessageBox.Show(v_e.ToString());
			}
		}

        private void m_cmd_quay_lai_Click(object sender, EventArgs e)
        {
            try
            {
                this.Close();
            }
            catch (Exception v_e)
            {
                MessageBox.Show(v_e.ToString());
            }
            
        }
		#endregion

	}
}
